package com.ihai.spring.boot.sample.distributed.counter.model;

/**
 * DESC
 *
 * @author 张驰
 * @date 2019/12/24
 */
public interface ICounter{
    /**
     * 是否主节点
     * @return
     */
    public boolean isMaster();

    /**
     * 设置为主节点
     * @param isMaster
     */
    public void isMaster(boolean isMaster);
    /**
     * 重置计数器
     * @return
     */
    public void reset();

    /**
     * 当前值
     * @return
     */
    public long get();

    /**
     * 计数器+1
     * @return
     */
    public long incr();

    /**
     * 增加
     * @param delta
     * @return
     */
    public long add(int delta);

    /**
     * 设置Counter名称
     * @param name
     * @return
     */
    public ICounter setName(String name);

    /**
     * 获取Counter名称
     * @return
     */
    public String getName();

    /**
     * 设置Counter值
     * @param value
     */
    public void setValue(long value);

    /**
     * 同步计数器
     * @param counter
     */
    public void asynFormRemote(ICounter counter);

    /**
     * 设置超时时间
     * @param timeout
     */
    public void setTimeout(long timeout);

    /**
     * 获取超时时间
     * @return
     */
    public long getTimeout();

    /**
     * 设置有效时间
     * @param availableTime
     * @return
     */
    public void setAvailableTime(long availableTime);

    /**
     * 获取有效时间
     * @return
     */
    public long getAvailableTime();

    /**
     * 是否超时
     * @return
     */
    public boolean isAvailable();
}
